import axios from 'axios'
import Vue from 'vue'
import router from '../router/index'
import store from '../store'
import { Toast } from 'vant'
Vue.use(Toast)
import { refreshTokenAPI } from './channel'

export function request (config) {
  const instance = axios.create({
    baseURL: 'http://toutiao.itheima.net'

  })
  // 请求拦截器
  instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // config是所有的请求信息
    // token验证请求
    if (config.headers.Authorization === undefined) {
      if (window.localStorage.getItem('token')) {
        config.headers.Authorization = `Bearer ${window.localStorage.getItem('token')}`
      }
    }
    return config
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  })

  // 登录(响应)拦截器
  instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    // token验证响应
    return response
  }, async function (error) {
    // 对响应错误做点什么
    if (error.response.data.message === 'refresh_token失效') {
      store.commit('settoken', '')
      store.commit('setrefreshtokens', '')
      Toast.fail('请重新登录')
      router.replace({
        // token失效后跳转到登录页面,但是记录下失效时的路由,然后push到之前失效时候的页面,对用户更加友好
        path: '/login?from=' + router.currentRoute.path
      })
    }
    if (error.response.status == 401) {
      // 失效就清除token
      store.commit('settoken', '')
      const resp = await refreshTokenAPI()
      store.commit('settoken', resp.data.data.token)
      error.config.headers.Authorization = 'Bearer ' + resp.data.data.token
      return request(error.config)

    } else {
      return Promise.reject(error)
    }
  })
  return instance(config)
}
